這次的內容是當我們滾輪往下滑時,停到導覽列的高度時導覽列會維持在網頁的最頂端
作品實做
let nav = document.querySelector("#main"); //選取nav列
let header = document.querySelector("header"); //選取header
//撰寫的CSS
.nav-fixed #main {
position: fixed;
box-shadow: rgba(99, 99, 99, 0.2) 0px 2px 8px 0px;
}
.nav-fixed #main .logo {
max-width: 100%;
}
let headerOffsetHeight = header.offsetHeight;//取得header的高度
function scrollHandler(e) {
//當螢幕滾動超過header的高度時在body添加"nav-fixed"
if (window.scrollY >= headerOffsetHeight) {
document.body.classList.add("nav-fixed");
document.body.style.paddingTop = nav.offsetHeight + "px";
//因為position: fixed的原因我們原本nav的高度會縮減,所以需要將被吃掉的高補回來
} else {
//如果小於等於header高度則清除樣式
document.body.classList.remove("nav-fixed");
document.body.style.paddingTop = ""; //清除樣式
}
}
window.addEventListener("scroll", scrollHandler); //監聽螢幕滾度
position: fixed;
是一種定位屬性,用來將元素相對於瀏覽器窗口進行定位,不會受父素的影響,預設位置為視窗左上角
document.body.style.paddingTop = "";
當我們設定””時代表,在CSS已經完全刪掉了此屬性,
這和我們設定為0的時候不一樣,設定為0的狀態在CSS樣式裡面還會保留此屬性
//當我們設定為""
document.body.style.paddingTop = "";
//這是CSS
body {
}
================================
//當我們設定為0
document.body.style.paddingTop = 0;
//這是CSS
body {
padding-top: 0
}
function rePosition() {
headerOffsetHeight = header.offsetHeight; //重新賦值header的高
}
window.addEventListener("resize", rePosition); //假設Header因為變版高度改變時
[ Alex 宅幹嘛 ] 👨💻 深入淺出 Javascript30 快速導覽 | Day 24:Sticky Nav
JS30